/**
 * # 参数列表实体类:
 *  AddDept - 添加部门
 * 
 * # 描述:
 *  为组织或一个上级部门添加一个下级部门。
 *  
 * Copyright (c), 上海沃恩信息科技有限公司.
 * All rights reserved.
 * Licensed under BSD (https://www.pittypat.work/bsd.html).
 */

package com.waln.authority.organization.args;

/**
 * 功能 添加部门 的参数列表。
 */
@pittypat.FunctionAnnotation(transaction = true)
public final class AddDept extends pittypat.FunctionArgs {
	/**
	 * 用户 Id。
	 * <p>
	 * 当前用户的 Id，由系统自动设置该参数。
	 */
	@pittypat.ParameterAnnotation(position = 0, role = pittypat.ParameterRole.USER_ID)
	public java.util.UUID userId;

	/**
	 * 上级部门的 Id。
	 * <p>
	 * 部门的上级机构的 Id，根组织没有上级部门，固定为 null。
	 */
	@pittypat.ParameterAnnotation(position = 1)
	public java.util.UUID parentId;

	/**
	 * 名称。
	 * <p>
	 * 组织或部门的名称。
	 */
	@pittypat.ParameterAnnotation(position = 2, maxLength = 50)
	public String name;

	/**
	 * 描述。
	 * <p>
	 * 对组织或者部门的描述信息。
	 */
	@pittypat.ParameterAnnotation(position = 3, maxLength = 2000)
	public String description;

	/**
	 * 设立日期。
	 * <p>
	 * 组织或部门的设立日期。
	 */
	@pittypat.ParameterAnnotation(position = 4)
	public java.time.LocalDate createDate;

	/**
	 * 新添加的部门。
	 * <p>
	 * 添加成功后新部门的信息。
	 */
	@pittypat.ParameterAnnotation(position = 5, direction = pittypat.ParameterDirection.OUT)
	public com.waln.authority.organization.data.Dept dept;

	/**
	 * 初始化 AddDept 类的一个新实例。
	 */
	public AddDept() {
		super();

		// 用户 Id
		this.userId = null;
		// 上级部门的 Id
		this.parentId = null;
		// 名称
		this.name = null;
		// 描述
		this.description = null;
		// 设立日期
		this.createDate = null;
		// 新添加的部门
		this.dept = null;
	}

	/**
	 * 获取指定名称的参数值。
	 * 
	 * @param name
	 * 			参数名称，不区分大小写。
	 * @return 指定名称的参数值。
	 */
	@Override
	public Object getParameterValue(String name) {
		if (name == null || name.length() == 0) {
			return null;
		}

		switch (name.toLowerCase()) {
			case "userid":
				return this.userId;
			case "parentid":
				return this.parentId;
			case "name":
				return this.name;
			case "description":
				return this.description;
			case "createdate":
				return this.createDate;
			case "dept":
				return this.dept;
			default:
				return null;
		}
	}

	/**
	 * 设置指定名称的参数值。
	 * 
	 * @param name
	 * 			参数名称，不区分大小写。
	 * @param value
	 * 			参数值。
	 * 
	 * @throws IllegalArgumentException
	 */
	@Override
	public void setParameterValue(String name, Object value) throws IllegalArgumentException {
		if (name == null || name.length() == 0) {
			throw new IllegalArgumentException("没有提供有效的参数名称。");
		}

		switch (name.toLowerCase()) {
			case "userid":
				this.userId = (java.util.UUID) value;
				break;
			case "parentid":
				this.parentId = (java.util.UUID) value;
				break;
			case "name":
				this.name = (String) value;
				break;
			case "description":
				this.description = (String) value;
				break;
			case "createdate":
				this.createDate = (java.time.LocalDate) value;
				break;
			case "dept":
				this.dept = (com.waln.authority.organization.data.Dept) value;
				break;
			default:
				throw new IllegalArgumentException(name + " 不是 " + this.getClass().getName() + " 的有效参数属性名称。");
		}
	}

	/**
	 * 将当前对象作为 JSON 字符串写入指定的文本流。
	 * 
	 * @param writer
	 * 			目标文本流。
	 * 
	 * @throws IllegalArgumentException
	 * @throws java.io.IOException
	 */
	@Override
	public void write(java.io.Writer writer) throws IllegalArgumentException, java.io.IOException {
		if (writer == null) {
			throw new IllegalArgumentException("writer 为 null。");
		}

		writer.write('{');

		// 用户 Id
		writer.write("\"userId\":");
		pittypat.Json.write(writer, this.userId);
		writer.write(',');

		// 上级部门的 Id
		writer.write("\"parentId\":");
		pittypat.Json.write(writer, this.parentId);
		writer.write(',');

		// 名称
		writer.write("\"name\":");
		pittypat.Json.write(writer, this.name);
		writer.write(',');

		// 描述
		writer.write("\"description\":");
		pittypat.Json.write(writer, this.description);
		writer.write(',');

		// 设立日期
		writer.write("\"createDate\":");
		pittypat.Json.write(writer, this.createDate);
		writer.write(',');

		// 新添加的部门
		writer.write("\"dept\":");
		pittypat.Json.write(writer, this.dept);

		writer.write('}');
	}
}
